package com.zhou.org.service;

import com.zhou.org.dao.Org;
import com.zhou.org.dto.UserUpdateDto;
import com.zhou.org.dto.WechatLoginRequest;
import com.zhou.org.dao.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhou.org.dto.UserQueryDto;
import org.springframework.web.multipart.MultipartFile;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author lang.zhou
 * @since 2022-08-23
 */
public interface UserService extends IService<User> {
    /**
     * 创建用户
     */
    int addUser(User user);
    User getUserDto(int userId);
    User getUserDtoByOrgId(int orgId);

    /**
     * 查询行政上级
     */
    User getSuperior(Integer orgId);


    /**
     * 为用户添加组织结构(不会删除其它组织结构)
     */
    int addUserWidthOrg(User user,int orgId);

    Org getOrgByUserId(Integer userId);

    /**
     * 修改用户基本信息
     */
    void changeUser(User user);
    void unlock(Collection<Integer> userIds);
    void lock(Collection<Integer> userIds);

    /**
     * 为用户设置组织结构(会删除其它组织结构)
     * @param newOrgIdList  新的组织结构
     */
    void saveUserWidthOrg(User user, List<Integer> newOrgIdList);
    User saveUser(UserUpdateDto dto);
    String saveUserHead(byte[] bytes,String filename, Integer userId);
    /**
     * 修改密码
     */
    void changeUserPassword(Integer userId, String oldHex, String newHex);
    void changeDescription(String description,int userId);

    /**
     * 删除用户
     */
    void deleteUser(List<Integer> ids);
    void resetPassword(List<Integer> ids);
    /**
     * 批量查询用户并且模糊搜索
     */
    List<User> getUsersByIdAndName(List<Integer> ids,String userName);
    List<Map<String,Object>> getUsersMapByIdAndName(List<Integer> ids,String userName);

    List<User> getUsersByOrgId(List<Integer> ids);
    User getUserByOrgId(Integer orgId);
    //int getOrgId(Integer id);
    Map<Integer,Integer> getOrgIdList(List<Integer> idList);
    User getByUserName(String username);
    List<User> getPageList(UserQueryDto dto);
    List<User> userAuto(String userName);



    User getByOpenId(String openId);
    User createWechatUser(WechatLoginRequest r);

}
